using Lzfy_Refund_Service.Models;

namespace Lzfy_Refund_Service.Repositories
{
    public interface IVerifyInfoRepository
    {
        Task<VerifyInfo?> GetByIdAsync(int id);
        Task<IEnumerable<VerifyInfo>> GetAllAsync();
        Task<IEnumerable<VerifyInfo>> GetByPatientIdAsync(string patientId);
        Task<VerifyInfo?> GetByVerifyCodeAsync(string verifyCode);
        Task<VerifyInfo?> GetByQrCodeAsync(string qrCode);
        Task<IEnumerable<VerifyInfo>> GetRecentAsync(int minutes, string? userId = null);
        Task<(IEnumerable<VerifyInfo> data, int totalCount)> GetWithFilterAsync(
            string? patientId = null,
            string? verifyCode = null,
            string? userId = null,
            string? patName = null,
            string? idNumber = null,
            DateTime? startDate = null,
            DateTime? endDate = null,
            int pageIndex = 1,
            int pageSize = 20);
        Task<int> CreateAsync(VerifyInfo verifyInfo);
        Task<bool> UpdateAsync(VerifyInfo verifyInfo);
        Task<bool> DeleteAsync(int id);
        Task<bool> SoftDeleteAsync(int id, string deletedBy);
    }
}